perm filename DPYIII.FAI[SYS,BGB] blob sn#001399 filedate 1970-11-12 generic text, type T, neo UTF8
00100	TITLE DISPLY  -- DISPLAY PRIMITIVES
00200
00300	OPDEF DPYPOS [XWD 702100,0]
00400	OPDEF DPYSIZ [XWD 702140,0]
00500	OPDEF DPYCLR [XWD 701000,0]
00600	OPDEF UPG [XWD 703000,0]
00700	OPDEF GETLIN [TTYUUO 6,]
00800
00900
01000	EXTERNAL USERERR
01100	A←1
01200	B←2
01300	C←3
01400
01500	SP←16
01600	P←17
01700
01800	INTERNAL DPYSET,AIVECT,AVECT,APT,RIVECT,RVECT,RPT
01900	INTERNAL APOINT,RPOINT,AVECW,AIVECW,RVECW,RIVECW,APOINW,GVECW
02000	INTERNAL LOCATE,DJUMP,DJSR,FIXUP,DPYOUT,HYDPOG,DPYCLR,DPYBIG,DPYBRT,DPYRESET,DPYPARS
02100	INTERNAL CLRBFR,GVECT,DTYO,DPYSST
02200
02300	RV←←6
02400	AV←←106
02500	VIS←←0
02600	EP←←20
02700	INV←←40
02800	SVS←100
02900	SV←2
03000	DEFINE COMPAT(N)<
03100		POP P,RETURN
03200		JSP COMP-N>
03300	
03400		POP P,5
03500		POP P,4
03600		POP P,3
03700		POP P,2
03800		POP P,1
03900	COMP:	JRST @0
04000	
     

00100	;SAIL DECLARATIONS
00200	;EXTERNAL PROCEDURE GVECT(INTEGER X,Y,OP,SIZE,BRT);
00300	;EXTERNAL PROCEDURE AIVECT(INTEGER X,Y)
00400	;EXTERNAL PROCEDURE AVECT(INTEGER X,Y)
00500	;EXTERNAL PROCEDURE APT(INTEGER X,Y)
00600	;EXTERNAL PROCEDURE RIVECT(INTEGER X,Y)
00700	;EXTERNAL PROCEDURE RVECT(INTEGER X,Y)
00800	;EXTERNAL PROCEDURE RPT(INTEGER X,Y)
00900	
01000	GVECT:	COMPAT(5)
01100		DPB C+1,[POINT 3,C,27]
01200		DPB C+2,[POINT 3,C,24]
01300		JRST LVC
01400
01500	AIVECT:	MOVEI C,INV+AV
01600		JRST LV
01700	AVECT:	MOVEI C,VIS+AV
01800		JRST LV
01900	APOINT:
02000	APT:	MOVEI C,EP+AV
02100	LV:	COMPAT(2)
02150		SKIPGE IGNORE↔JRST @RETURN
02200	LVC:	DPB A,[POINT 11,C,10]
02300		DPB B,[POINT 11,C,21]
02400	LV2:	AOS A,DPYPTR
02500		MOVEM C,(A)
02600	LV3:	HRLI A,<(<POINT 7,0,35>)>
02700		MOVEM A,DPYPTR
02800		HRRZI A,(A)
02900		CAML A,BUFEND
02950		SETOM IGNORE
02975		SKIPA
03000		JRST[	PUSH P,[0]
03100			PUSH P,[0]
03200			PUSH SP,[=19]
03300			PUSH SP,[POINT 7,[ASCIZ /DPY BUFFER OVERFLOW/]]
03400			PUSHJ P,USERERR
03500			SOS DPYPTR
03600			JRST .+1]
03700		JRST @RETURN
03800
03900	RIVECT:	MOVEI C,INV+RV
04000		JRST RVG
04100	RVECT:	MOVEI C,VIS+RV
04200		JRST RVG
04300	RPOINT:
04400	RPT:	MOVEI C,EP+RV
04500	RVG:	COMPAT(2)
04600		SKIPE RELFLG#
04700		JRST LVC
04800		CAML A,[-SVS]
04900		CAIL A,SVS
05000		JRST LVC
05100		CAML B,[-SVS]
05200		CAIL B,SVS
05300		JRST LVC
05400		ANDCMI C,RV	;CAN CONSTRUCT SHORT VECTOR
05500		DPB A,[POINT 7,C,22]
05600		DPB B,[POINT 7,C,29]
05700		LSH C,20
05800		ORI C,SV+INV	;MAKE 2ND VECTORE INVISIBLE - ZERO LENGTH
05900		MOVE A,@DPYPTR
06000		TLZ A,777774
06100		CAIE A,(C)	;WAS LAST DPY OUTPUT A SHORT VECTOR WORD WITH 2ND VECTOR ZERO?
06200		JRST LV2	;NO
06300		LSH C,-24	;YES, PUT IT THERE
06400		DPB C,[POINT 16,@DPYPTR,31]
06500		HRRZ A,DPYPTR
06600		JRST @RETURN
06700	
06800	INTERNAL NORELOPT,RELOPT
06900	NORELOPT:SETOM RELFLG
07000		POPJ P,
07100	
07200	RELOPT:	SETZM RELFLG
07300		POPJ P,
     

00100	
00200	GVECW:	COMPAT(5)
00300		DPB C+1,[POINT 3,C,27]
00400		DPB C+2,[POINT 3,C,24]
00500		JRST LVCW
00600
00700	AIVECW:	MOVEI C,INV+AV
00800		JRST LVW
00900	AVECW:	MOVEI C,VIS+AV
01000		JRST LVW
01100	APOINW:	MOVEI C,EP+AV
01200	LVW:	COMPAT(2)
01300	LVCW:	DPB A,[POINT 11,C,10]
01400		DPB B,[POINT 11,C,21]
01500		MOVE A,C
01600		JRST @RETURN
01700
01800	RIVECW:	MOVEI C,INV+RV
01900		JRST LVW
02000	RVECW:	MOVEI C,VIS+RV
02100		JRST LVW
02200	RPOINW:	MOVEI C,EP+RV
02300		JRST LVW
     

00100	
00200	;SAIL DECLARATIONS
00300	;EXTERNAL INTEGER PROCEDURE LOCATE
00400	;EXTERNAL PROCEDURE DTYO(INTEGER CHAR)
00500	;EXTERNAL PROCEDURE DPYSST(STRING S);
00600	;EXTERNAL PROCEDURE DJUMP(INTEGER ADR)
00700	;EXTERNAL PROCEDURE DJSR(INTEGER ADR)
00800	;EXTERNAL PRODECURE FIXUP(INTEGER ADR,VAL)
00900	
01000	LOCATE:	HRRZ A,DPYPTR
01100		POPJ P,
01200	
01300	DTYO:	COMPAT(1)
01400		IDPB A,DPYPTR
01500		HRRZ A,DPYPTR
01600		CAML A,BUFEND
01700		SETOM IGNORE
01800		JRST @RETURN
01900	
02000	DPYSST:	POP SP,1
02100		POP SP,2
02150		SKIPGE IGNORE↔POPJ P,
02200		HRRZS 2		;LENGTH
02300		JUMPLE 2,SSRET
02400		ILDB 3,1
02500		IDPB 3,DPYPTR
02600		SOJG 2,.-2
02700	SSRET:	HRRZ 1,DPYPTR
02800		CAML 1,BUFEND
02900		SETOM IGNORE
03000		POPJ P,
03100	
03200	DJUMP:	MOVEI C,1B31
03300		JRST DJ2
03400
03500	DJSR:	MOVEI C,24
03600	DJ2:	COMPAT(1)
03700		MOVSS A
03800		ADD C,A
03900		JRST LV2
04000
04100	FIXUP:	COMPAT(2)
04200		HRLM B,(A)
04300		JRST @RETURN
     

00100
00200	;SAIL DECLARATIONS
00300	;EXTERNAL PROCEDURE DPYOUT(INTEGER PIECE_OF_GLASS)
00400	;EXTERNAL PROCEDURE DPYCLR;
00500	;EXTERNAL PROCEDURE DPYBIG(INTEGER SIZE);
00600	;EXTERNAL PROCEDURE DPYTST;
00700	;EXTERNAL PROCEDURE HYDPOG(INTEGER PIECE_OF_GLASS)
00800	;EXTERNAL PROCEDURE CLRBFR;
00900	;EXTERNAL PROCEDURE DPYSET(INTEGER ARRAY BUF);
01000	
01100	
01200	; DPYTST TESTS TTY TO SEE IF IT IS A DPY -- SETS DPYFLG=0 IF A DPY,=-1 IF NOT
01300	INTERNAL DPYTST
01400	DPYTST:	JRST .+3      
01500		GETLIN 1
01600		SKIPGE 1
01700		SETZM DPYFLG	;WE ARE ON A DPY
01800		POPJ P,
01900	
02000	DPYBIG:	COMPAT(1)
02100		MOVEI 3,INV+RV	;ZERO LENGTH RELATIVE-INVISIBLE VECTOR
02200		DPB 1,[POINT 3,3,27]
02300		JRST LV2
02400	
02500	DPYBRT:	COMPAT(1)
02600		MOVEI 3,INV+RV
02700		DPB 1,[POINT 3,3,24]
02800		JRST LV2
02900	
03000	DPYCLR:	SKIPL DPYFLG#
03100		DPYCLR
03200		MOVSI 777774
03300		MOVEM POGWD
03400		SETZM BUFHD
03500		POPJ P,
03600	
03700	DPYOUT:	PUSHJ P,DPYPARS
03800		HRRZ B,DPYPTR
03900		SUB B,BUFHD
04000		ADDI B,1
04100		MOVEM B,BUFHD+1
04200	SH2:	COMPAT(1)
04300		DPB A,[POINT 4,SH1,12]
04400		OR A,DPYFLG
04500		SKIPL A
04600	SH1:	UPG BUFHD
04700	FALSE:	MOVEI A,0
04800		JRST @RETURN
04900	
05000	CLRBFR:	COMPAT(0)
05100		JRST CLR2
05200	
05300	DPYSET:	PUSHJ P,DPYTST
05400		COMPAT(1)
05500		ADDI 1,2
05600		MOVEM 1,BUFHD
05700		HRRZ 2,-3(1)	;SIZE
05800		ADDI 2,-3(1)
05850		SUBI 2,1
05875		SETZM IGNORE
05900		MOVEM 2,BUFEND
06000	
06100	CLR2:	MOVE A,BUFHD
06200		MOVEI B,1
06300		MOVEM B,1(A)
06400		MOVEI B,2(A)
06500		HRLI B,1(A)
06600		BLT B,@BUFEND	;SET DPY BUFFER TO NULL CHARACTER WORDS
06700		JRST LV3
06800	
06900
07000	HYDPOG:	SETZM BUFHD+1
07100		JRST SH2
07200
07300	DPYPARS:	SKIPN 1,BUFHD
07400		POPJ P,
07500		MOVE 2,DPYPTR
07600		MOVEM 2,-2(1)
07700		MOVEI 2,2(2)
07800		SUB 2,1
07900		MOVEM 2,-1(1)
08000		POPJ P,
08100	
08200	DPYRESET:	COMPAT(1)
08300		ADDI 1,2
08400		MOVEM 1,BUFHD
08500		HRRZ 2,-3(1)
08600		ADDI 2,-3(1)
08700		MOVEM 2,BUFEND
08800		HRRZ 1,-2(1)
08900		JRST CLR2+1
09000	
09100	INTERNAL DPYTYP,TYPLOC
09200	DPYTYP:	PUSHJ P,DPYTST
09300		COMPAT(3)
09400		SKIPGE DPYFLG
09500		JRST @RETURN
09600		DPYPOS(1)	;POSITION
09700		DPB 2,[POINT 9,3,26]
09800		DPYSIZ (3)
09900		JRST @RETURN
10000	
10100	TYPLOC:	PUSHJ P,DPYTST
10200		COMPAT(2)
10300		SKIPGE DPYFLG
10400		JRST @RETURN
10500		DPYPOS (1)
10600		SUB 1,2
10700		IDIVI 1,=23
10800		CAIG 1,2
10900		MOVEI 1,3
11000		DPYSIZ 1000-2(1)
11100		JRST @RETURN
     

00100	;SAIL DECLARATIONS
00200	;EXTERNAL PROCEDURE PGSEL(INTEGER POG)
00300	;EXTERNAL PROCEDURE UPGMVM(INTEGER VAL;REFERENCE INTEGER ADR);
00400	;EXTERNAL INTEGER PROCEDURE UPGMVE(REFERENCE INTEGER ADR);
00500	
00600	INTERNAL PGSEL,UPGMVM,UPGMVE,GETPOG,RELPOG
00700	PGSEL:	COMPAT(1)
00800		JUMPL 1,@RETURN
00900		SKIPL DPYFLG
01000		PGSEL 1
01100		JRST @RETURN
01200	
01300	UPGMVM:	COMPAT(2)
01400		SKIPL DPYFLG
01500		UPGMVM 1,(2)
01600		JRST @RETURN
01700	
01800	UPGMVE:	COMPAT(1)
01900		SKIPL DPYFLG
02000		UPGMVE 1,(1)
02100		JRST @RETURN
02200	
02300	POGWD:	XWD 777774,0
02400	
02500	GETPOG:	MOVE POGWD
02600		JFFO .+2
02700		MOVNI 1,1
02800		ROT (1)
02900		TLZ 400000
03000		MOVN 2,1
03100		ROT(2)
03200		MOVEM POGWD
03300		POPJ P,
03400	
03500	RELPOG:	MOVE 1,-1(P)
03600		MOVE POGWD
03700		ROT (1)
03800		TLO 400000
03900		MOVN 2,1
04000		ROT(2)
04100		MOVEM POGWD
04200		JRST HYDPOG
04250	IGNORE:	0
04300	
04400	RETURN:	0
04450	
04500	
04600	INTERNAL DPYPTR;
04700	DPYPTR:	0
04800	BUFEND:	0
04900	BUFHD:	0
05000		0
05100
05200		END